package A001singleton;

public class A003Singleton懒汉式03_静态内部类模式_适用于多线程 {

    public static class Singleton {
        /**
         * 1、内部类被加载和初始化时，才创建INSTANCE实例对象
         * 2、静态内部类不会自动创建,随着外部类的加载初始化而初始化，他是要单独去加载和实例化的
         * 3、因为是在内部类加载和初始化时，创建的，因此线程安全
         */
        private Singleton(){}

        public static class Inner{
            private static final Singleton INSTANCE = new Singleton();
        }
        public static Singleton getInstance() {
            return Inner.INSTANCE;
        }
    }

    public static void main(String[] args) {
        System.out.println(A003Singleton懒汉式03_静态内部类模式_适用于多线程.Singleton.getInstance() == A003Singleton懒汉式03_静态内部类模式_适用于多线程.Singleton.getInstance());
        System.out.println(A003Singleton懒汉式03_静态内部类模式_适用于多线程.Singleton.getInstance() == A003Singleton懒汉式03_静态内部类模式_适用于多线程.Singleton.getInstance());
    }

}
